var permute = function(nums) {
    let res = []
    let curr = []
    let len = nums.length
    let visited = {} // 标记数字，避免重复使用

    function dfs(nth) {  // 入参是坑位
    if(nth == len) {
        res.push([...curr])
    }
        // 检查手上剩余数字 nums[i]
        for(let i = 0; i < len; i++) {
            if(!visited[nums[i]]) {
                visited[nums[i]] = 1 // 标记该数字被使用过
                curr.push(nums[i])
                dfs(nth+1)
                curr.pop()
                visited[nums[i]] = 0
            }
            
        }
    }
    dfs(0)
    return res
};